import numpy as np
import pandas as pd


def sep(label=''):
    """Utility function to print separator line."""
    print('-' * 32, label, '-' * 32, sep='')


# 2.	调用pandas，使用loan数据，进行如下操作（25分）
# (1)	基础操作（10分）
# ①	读取数据集 loan.xls（2分）
sep('①	读取数据集 loan.xls')
df = pd.read_excel(r'../../../large_data/ML2/monthly_exam/loans.xls')
m, n = df.shape
print(m, n)
print(df[:5])
print(df.info())

# ②	打印输出所有列贷款期限的缺失数据的比例（2分）
sep('②	打印输出所有列贷款期限的缺失数据的比例')
print(df.isnull().sum(axis=0) / m)

# ③	按“发放贷款日期”降序,“贷款金额”升序打印输出（3分）
sep('③	按“发放贷款日期”降序,“贷款金额”升序打印输出')
print(df.sort_values(['发放贷款日期', '贷款金额'], ascending=[False, True]))

# ④	新增一列“每月归还额= 贷款金额/贷款期限（3分）
sep('④	新增一列“每月归还额= 贷款金额/贷款期限')
df['每月归还额'] = df['贷款金额'] / df['贷款期限']
print(df[:5])

# (2)	数据查询
# ①	输出账户号在3000-5000之间的数据（3分）
sep('①	输出账户号在3000-5000之间的数据')
print(df[df['账户号'].between(3000, 5000)])

# ②	删除账户号列，增加每月还款额列（每月还款额列=贷款金额/贷款期限）（3分）
sep('②	删除账户号列，增加每月还款额列（每月还款额列=贷款金额/贷款期限）')
del df['账户号']
df['每月还款额'] = df['贷款金额'] / df['贷款期限']
print(df[:5])

# ③	对还款状态进行计数（3分）
sep('③	对还款状态进行计数')
print(df['还款状态'].value_counts())

# ④	按照还款状态进行分组，计算贷款金额的最大值（3分）
sep('④	按照还款状态进行分组，计算贷款金额的最大值')
grp = df.groupby('还款状态')
print(grp.agg(np.max)['贷款金额'])

# ⑤	输出每月还款额的最大值与中位数（3分）
sep('⑤	输出每月还款额的最大值与中位数')
print(f'最大值: {df["每月还款额"].max()}')
print(f'中位数: {df["每月还款额"].median()}')
